// 路由权限 就是能访问那些路由页面
// 只有访问路由页面 都会 路由守卫
import router from "@/router"
import nprogress from "nprogress"
import setting from "./setting"
//引入进度条样式
import "nprogress/nprogress.css"
import useCounterStore from "@/store/modules/user"
import pinia from "@/store/index"
// import { ElLoading } from 'element-plus';
// 前置路由守卫 就在比如跳转路由前之前执行的方法
let tokensotr = useCounterStore(pinia) //在ts文件中这里就是异步获取pinia中的token  就需要重新引入pinia根仓库

router.beforeEach(async (to, from, next) => {
  // to 要去那个路由页面  from从那个路由过来的  next要不要放行 让你去想要去的页面\系统标题
  document.title = `${setting.title}-${to.meta.title}`
  // 修改
  if (tokensotr.token) {
    //有token就是登陆了
    if (to.path === "/login" || to.path === "/404") {
      next({ path: "/" })
    } else {
      //登陆成功访问其他页面  这里建议可以直接吧用户资料放本地要不然很麻烦
      //解决刷新用户资料消失一般配置插件用户资料信息存在本地中
      if (tokensotr.username) {
        //这里要是有用户资料信息直接放行就行   不用在发接口获取资料信息
        next()
      } else {
        //这里要是没有用户资料信息就发请求获取用户资料
        try {
          await tokensotr.userinof()
          next()
        } catch (Error) {
          await tokensotr.Clearuser()
          next({ path: "/login", query: { redirect: to.path } })
        }
      }
      next()
    }
  } else {
    //没有token就是没有登陆 只能去404页面跟登陆页面
    if (to.path === "/login" || to.path === "/404") {
      next()
    } else {
      //如果访问除了404 跟登陆其他页面就强制回到登录页面
      next({
        path: "/login",
        query: { redirect: to.path },
      })
    }
  }

  // const loadingInstance = ElLoading.service({ fullscreen: true, background: 'rgba(0, 0, 0, 0.5)' });
  nprogress.configure({ showSpinner: false }) //去掉进度条右边圆圈loading效果
  nprogress.start() //开启进度条
  next()
})

// 后置路由守卫 就在比如路由跳转之后执行的方法
router.afterEach((route) => {
  // const loadingInstance = ElLoading.service({ fullscreen: true, background: 'rgba(0, 0, 0, 0.5)' });
  // loadingInstance.close();//路由变化页面加载效果
  nprogress.configure({ showSpinner: false }) //去掉进度条右边圆圈loading效果
  nprogress.done() //关闭进度条
})
// export default router;
//1.路由跳转加进度条效果 (路由守卫)
// 2. 应该是免登陆 用户没有登陆只能访问登陆页面跟404   登陆成功不可以访问登陆页面
